<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 普通函数
    // function fn() {
    //     var a = 10;
    //     a++;
    //     return a;
    // }

    // var result = fn();
    // console.log(result);

    // 函数嵌套 => 一般情况下 函数执行完毕->作用域和变量就释放了
    // function fn() {
    //     var a = 10; //  11
    //     function func() {
    //         a++;
    //         return a; // 11
    //     }
    //     return func(); // 调用函数func 返回函数的执行结果
    // }

    // var result = fn();
    // console.log(result);

    // 闭包 
    // 函数在执行过程中返回了另一个函数,另一个函数中引用了父作用域的变量 => 导致父作用域一直得不到释放
    // 闭包是指    有权访问另一个函数作用域中的变量    的函数。
    // 简单的来说  就是 一个函数在执行过程中 返回另一个函数/对象 (引用类型   一般都是函数)
    
    function fn() {
        // debugger;
        var a = 10; // 11 12
        function func() {
            // debugger;
            a++;
            return a; // 11
        }
        return func;  // 返回函数func
    }

    var newFn = fn(); // newFn 本质上引用函数 func
    console.log(newFn);

    var result = newFn();
    console.log(result);

    var result = newFn();
    console.log(result);






</script>

</html>